#INTRODUCCIÓN contextualiza la idea del seminario, entrega una idea general de la temática, de lo que se sabe y sobre todo de lo que no se sabe y queréis abordar en vuestro trabajo.

El suicidio es un fenómeno ocmplejo que constituye un importante problema de salud pública en España y en el mundo. Aunque se dispone de información general sobre la mortalidad por suicidio, la evidencia científica revela diferencias significativas según el sexo, la edad y el territorio.

En este seminario, nos proponemos comparar el suicidio utilizando distintos conjuntos de datos (sexo, edad y territorio) para explorar las diferencias y analizar a que se deben.

#OBJETIVOS 1. Describir la distribución del suicidio por sexo en España.

  1. Analizar las diferencias entre provincias.

  2. Estudiar la influencia del grupo de edad en la cantidad de suicidios.

  3. Unificar los datos CSV y JSON para obtener una vista más completa.

  4. (Opcional) Explorar si existe relación entre grupos de edad + provincias + sexo.

#PAQUETES UTILIZADOS Para poder utilizar nuestros conjuntos de datos es necesario importar las siguientes librerias y paquetes:

# Datos con formato .csv:
library(readr)

#Datos con formato .json:
library(tidyverse)
library(rjson)
library(jsonlite)
library(tidyjson)

#Visualizacion resultados:
library(DT)
library(ggplot2)
library(gifski)
library(gganimate)
library(plotly)
library(dplyr)
library(mapSpain)

DESARROLLO Y RESULTADOS

Una vez cargadas las librerias importamos los datos

OBTENCIÓN DE LOS DATOS

Para este trabajo se han utilizado dos conjuntos de datos procedentes del Instituto Nacional de Estadísitca (INE), a través de sus estadísticas oficiales sobre defunciones según causa de muerte. Ambas fuentes se han descargado directamente desde la herramienta de consulta del INE y contienen información actualizada y validada por el organismo.

  • provincias_sexo.csv: Este archivo recoge la tasa de suicidios por cada 100.000 habitantes en Esapaña, desglosada por: provincia, sexo (total, hombes, mujeres) y año (2021, 2022 y 2023). Cada fila representa la tasa correspondiente a un territorio y un sexo concreto en un año determinado. Estos valores provienen directamente el INE y reflejan las tasas oficiales calculadas del instituto, basadas en la población residente de cada año. Este archivo le hemos utilizado para:
    • Analizar la evolución reciente (2021 - 2023)
    • Las diferencias entre sexos
    • Las variaciones territoriales entre provincias.
  • suicidio_Edad-Sexo.json: Este JSON contiene el número absoluto de suicidios registrados a nivel nacional en el año 2022 (creemos). Está desglosado por grupo de edad y por sexo. La estructura del Json incluye:
    • Un campo MetaData, donde se especifíca el sexo y el grupo de edad.
    • Un campo Data, donde aparece el valor numérico de suicidios en ese grupo. Estos datos también han sido descargados del INE y corresponden al mismo sistema estadístico, pero en este caso sin convertirlos en tasas, es decir, son numéros absolutos de casos, no tasas de población. Este archivo se ha empleado para:
    • Calcular los suicidios totales por sexo
    • Relacionar los valores con la población para obtener tasas a medida
    • Analizar diferencias entre grupos de edad

En resumen, el CSV ofrece tasas por provincia, sexo y año, mientras que el JSON proporciona números absolutos por edad y sexo a nivel nacional. Esta combinación permite un análisis estadístico completo tanto a nivel territorial como demográfico.

IMPORTACIÓN DE LOS DATOS

IMPORTACIÓN DATOS CSV

En algunos de nuestros archivos csv, es necesario especificar el tipo de codificación que tienen, para que R pueda leer correctamente los caracteres especiales como tildes o ñ. En nuestro caso utilizan la codificacion ISO 8859-1 que corresponde con el alfabeto español??? :

# Para conocer el tipo de codificación: 
encoding <- guess_encoding("INPUT/DATA/provincias_sexo.csv")
print(encoding)
## # A tibble: 4 × 2
##   encoding     confidence
##   <chr>             <dbl>
## 1 UTF-8              1   
## 2 Shift_JIS          1   
## 3 windows-1252       0.45
## 4 windows-1250       0.21
provincias <- read_delim("INPUT/DATA/provincias_sexo.csv", 
                        delim = ";", trim_ws = TRUE, 
                        locale = locale(encoding = "ISO-8859-1"))
head(provincias)
## # A tibble: 6 × 4
##   Provincias Sexo    Periodo Total
##   <chr>      <chr>     <dbl> <dbl>
## 1 Nacional   Total      2023  8512
## 2 Nacional   Total      2022  8846
## 3 Nacional   Total      2021   845
## 4 Nacional   Hombres    2023 12846
## 5 Nacional   Hombres    2022 13343
## 6 Nacional   Hombres    2021 12833

IMPORTACIÓN DEL JSON

# Ruta al archivo JSON
ruta_json <- "INPUT/DATA/Suicidio_Edad-Sexo.json"

# Importar JSON y convertir a dataframe
suicidios_json <- fromJSON(ruta_json)
#suicidios_json <- as.data.frame(suicidios_json)

# Mostrar las primeras filas
head(suicidios_json)
##                            Nombre
## 1   Todas las edades, Ambos sexos
## 2       Todas las edades, Hombres
## 3       Todas las edades, Mujeres
## 4 Menores de 15 años, Ambos sexos
## 5     Menores de 15 años, Hombres
## 6     Menores de 15 años, Mujeres
##                                                                   MetaData Data
## 1    edad, sexo, Todas las edades, Ambos sexos, todaslasedades, ambossexos 4227
## 2           edad, sexo, Todas las edades, Hombres, todaslasedades, hombres 3126
## 3           edad, sexo, Todas las edades, Mujeres, todaslasedades, mujeres 1101
## 4 edad, sexo, Menores de 15 años, Ambos sexos, menoresde15anos, ambossexos   12
## 5        edad, sexo, Menores de 15 años, Hombres, menoresde15anos, hombres    9
## 6        edad, sexo, Menores de 15 años, Mujeres, menoresde15anos, mujeres    3

FILTRADO Y PREPARACIÓN DE LOS DATOS

Los datos han sido filtrados y preparados para asegurar la coherencia entre las fuentes. Se eliminaron los totales generales en sexo para poder comparar hombres y mujeres. Se normalizó el nombre de las provincias para ….noseq y se separó el json en edad, sexo y valor para noseqqq

Normalizar nombres de provincias

# Crear el dataframe filtrado para el gráfico
# (Usa el dataframe 'provincias' que ya cargaste y mutaste)
Suicidios_CSV_filtrado <- provincias %>%
  filter(Sexo != "Total", 
         Provincias != "Nacional")

# Ver el resultado (opcional)
head(Suicidios_CSV_filtrado)
## # A tibble: 6 × 4
##   Provincias             Sexo    Periodo Total
##   <chr>                  <chr>     <dbl> <dbl>
## 1 "01 Araba/Ã\u0081lava" Hombres    2023 10835
## 2 "01 Araba/Ã\u0081lava" Hombres    2022 13939
## 3 "01 Araba/Ã\u0081lava" Hombres    2021 10963
## 4 "01 Araba/Ã\u0081lava" Mujeres    2023  4086
## 5 "01 Araba/Ã\u0081lava" Mujeres    2022  4703
## 6 "01 Araba/Ã\u0081lava" Mujeres    2021  5323

Eliminar “total” en sexo

Para así comparar hombres vs mujeres (entonces yo quitaría lo de cambiar el separador decimal xq si quitamos el total no nos hace falta camibar lo de . por , nose)

library(dplyr)
library(purrr)
library(tidyr)

# ===============================
# 1. Provincias: eliminar "Total" en Sexo
# ===============================
provincias_filtrado <- provincias %>%
  filter(Sexo != "Total")

# Revisar resultado
head(provincias_filtrado)
## # A tibble: 6 × 4
##   Provincias Sexo    Periodo Total
##   <chr>      <chr>     <dbl> <dbl>
## 1 Nacional   Hombres    2023 12846
## 2 Nacional   Hombres    2022 13343
## 3 Nacional   Hombres    2021 12833
## 4 Nacional   Mujeres    2023  4348
## 5 Nacional   Mujeres    2022   452
## 6 Nacional   Mujeres    2021   423

HACER UN FILTRO EN EL NOMBRE DE LAS PROVINCIAS PARA QUE LOS NOMBRES SE VEAN BIEN Y NO CON CARACTERES RAROS, POR EJEMPLO QUITAR LAS TILDES O LAS Ñ

El JSON:separar edad y sexo

Extraer: - Lista de edades - Lista de sexos - Valor

# Chunk CORREGIDO para: ### El JSON:separar edad y sexo
# (Asegúrate de tener 'library(tidyverse)' y 'library(jsonlite)' en tu chunk de paquetes)

# Este código usa un método más robusto para "aplanar" el JSON
# y evitar que se creen valores NA.

Suicidios_Edad <- as_tibble(suicidios_json) %>%
  
  # 1. Extraer el 'Valor' de la sub-lista 'Data'
  #    (map_dbl toma cada elemento de 'Data' y extrae el primer 'Valor')
  mutate(Valor = map_dbl(Data, ~ .x$Valor[1])) %>%
  
  # 2. Guardar el 'Nombre' original (ej. "De 15 a 29 años, Hombres")
  #    como un ID único para agrupar las filas.
  select(ID_Fila = Nombre, Valor, MetaData) %>%
  
  # 3. Desanidar 'MetaData', que creará dos filas por cada ID_Fila
  #    (una para 'edad' y otra para 'sexo')
  unnest(MetaData) %>%
  
  # 4. Seleccionar solo las columnas que necesitamos para pivotar
  select(ID_Fila, Valor, T3_Variable, Nombre) %>%

  # 5. Pivotar usando el ID_Fila. Esto asegura que la 'edad' y el 'sexo'
  #    del mismo ID_Fila terminen en la misma fila, junto a su 'Valor'.
  pivot_wider(names_from = T3_Variable, values_from = Nombre) %>%
  
  # 6. Filtrar los totales (como antes)
  filter(sexo != "Ambos sexos",
         edad != "Todas las edades") %>%
  
  # 7. (Opcional) Quitar la columna de ID, ya no la necesitamos
  select(edad, sexo, Valor)

# Ver el resultado (opcional)
# Esta tabla ya no debería tener NAs en 'edad' o 'sexo'
print("Datos JSON (versión final) listos:")
## [1] "Datos JSON (versión final) listos:"
head(Suicidios_Edad)
## # A tibble: 6 × 3
##   edad               sexo    Valor
##   <chr>              <chr>   <dbl>
## 1 Menores de 15 años Hombres     9
## 2 Menores de 15 años Mujeres     3
## 3 De 15 a 29 años    Hombres   224
## 4 De 15 a 29 años    Mujeres   117
## 5 De 30 a 39 años    Hombres   336
## 6 De 30 a 39 años    Mujeres   100

RESULTADOS

Aquí vienen los gráficos

Suicidio por sexo a nivel nacional

# Sumar los valores por sexo
suicidio_sexo_nacional <- Suicidios_Edad %>%
  group_by(sexo) %>%
  summarise(Total = sum(Valor, na.rm = TRUE))

# Revisar tabla
print(suicidio_sexo_nacional)
## # A tibble: 2 × 2
##   sexo    Total
##   <chr>   <dbl>
## 1 Hombres  3126
## 2 Mujeres  1101
# #GRAFICO DE BARRAS (suicidios por sexo a nivel nacional)
ggplot(suicidio_sexo_nacional, aes(x = sexo, y = Total, fill = sexo)) +
  geom_bar(stat = "identity") +
  labs(
    title = "Suicidios por sexo a nivel nacional",
    x = "Sexo",
    y = "Número total de suicidios"
  ) +
  scale_fill_manual(values = c("Hombres" = "#1f77b4", "Mujeres" = "#ff7f0e")) +
  theme_minimal()

# 1. Filtrar datos a nivel nacional (ya que JSON tiene solo sexo y edad, sumamos por sexo)
nacional_sexo <- Suicidios_Edad %>%
  group_by(sexo) %>%
  summarise(Total = sum(Valor))

#GRÁFICO CIRCULAR
ggplot(nacional_sexo, aes(x = "", y = Total, fill = sexo)) +
  geom_bar(stat = "identity", width = 1) +   # barra para convertir a circular
  coord_polar(theta = "y") +                 # transforma a circular
  labs(title = "Suicidios por sexo a nivel nacional") +
  theme_minimal() +
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank()) +
  scale_fill_manual(values = c("Hombres" = "steelblue", "Mujeres" = "pink"))

INTERPRETACIÓN El gráfico de barras compara el total de suicidios entre hombres y mujeres, muestra que los hombreses presentan un mayor número de suicidios. El gráfico circular representa la misma información, pero en proporciones del total, muestra que los hombres representan aproximadamente el 75% de los suicidios a nivel nacional, mientras que las mujeres el 25%.

En conclusión, los análisis del total de suicidios según el sexo muestra una diferencia clara entre hombres y mujeres. En España, el número total de suicidios es significativamente mayor en hombres que en mujeres, lo cual coincide con las estadísitcas nacionales e internacionales, donde los hombres presentan tasas de suicidio más elevadas a pesar de que las mujeres registran más intentos no letales. Este patrón puede estar asociado a factores socioculturales, diferencias en métodos utilizados, menor búsqueda de ayuda por parte de los hombres o barreras sociales relaccionadas con la salud mental.

Suicidio por provincia

# Carga la librería plotly (si no está ya cargada)
library(plotly)

# 1. CREA el gráfico de ggplot (como antes, pero lo guardamos en una variable 'p')
#    (Añado 'ncol=6' para que plotly tenga un layout inicial ordenado)
p <- ggplot(Suicidios_CSV_filtrado, aes(x = Sexo, y = Total, color = Sexo)) + 
  geom_point() + 
  facet_wrap(~Provincias, ncol = 6) + # 6 columnas de mini-gráficos
  theme(
    axis.text.x = element_text(angle = 0), 
    strip.text = element_text(size = 7) 
  )

# 2. CONVIÉRTELO en interactivo con un solo comando
#    Ahora podrás hacer zoom y ver los detalles
ggplotly(p)

Suicidio por edad (JSON)

# Gráfico 4.4.3: Suicidio por edad (CORREGIDO)
# La corrección está en aes(fill = sexo) -> (todo en minúscula)

ggplot(Suicidios_Edad, aes(x = edad, y = Valor, fill = sexo)) + 
  geom_bar(stat = "identity", position = "dodge") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

Explicar lo que hemos obtenido del gráfico

Union CSV + JSON

CAMBIAR:

#PRIMERO FILTRAMOS SOLO LA FINLA "NACIONAL" DEL CSV Y ELIMINAMOS "TOTAL" EN SEXO:
# Filtrar nacional y sexo masculino/femenino en CSV
nacional_csv <- provincias %>%
  filter(Provincias == "Nacional", Sexo != "Total") %>%
  select(sexo = Sexo, Total)  # renombramos columna Sexo a sexo

#AHORA, DEL JSON SUMAMOS LOS VALORES POR SEXO PARA TENER COMPARABLES
nacional_json <- Suicidios_Edad %>%
  group_by(sexo) %>%
  summarise(Total_JSON = sum(Valor, na.rm = TRUE))

#UNIMOS AMBOS DATASETS POR SEXO
nacional_comparativo <- nacional_csv %>%
  left_join(nacional_json, by = "sexo") %>%
  tidyr::pivot_longer(cols = c(Total, Total_JSON),
                      names_to = "Fuente",
                      values_to = "Valor")

Ahora nacional_comparativo tiene columnas: - sexo –> Hombres/Mujeres - Fuente –> CSV o JSON - valor –> número de suicidios

# GRAFICO COMPARATIVO (BARRAS LADO A LADO)
ggplot(nacional_comparativo, aes(x = sexo, y = Valor, fill = Fuente)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
  labs(
    title = "Comparación de suicidios por sexo a nivel nacional: CSV vs JSON",
    x = "Sexo",
    y = "Número total de suicidios"
  ) +
  scale_fill_manual(values = c("Total" = "#1f77b4", "Total_JSON" = "#ff7f0e"),
                    labels = c("CSV", "JSON")) +
  theme_minimal() +
  theme(
    text = element_text(size = 12),
    axis.text.x = element_text(angle = 0, hjust = 0.5)
  )

ME FALTA COMENTAR EL RESULTADO (poner foto a chati y q diga), VER SI CON LOS DOS (CVS Y JSON) PUEDO HACER ALGUNA COMPARACIÓN MAS Y PONER EN EL WORD LA EXPLICACIÓN DEL CODIGO.

…. Esto me lo dijo chat (puede ser para el 4.4 nose) –> Como ambos archivos (csv y json) comparten la varaible sexo, podemos unirlos por dicha variable

CONCLUSIONES

#REFERENCIAS